/*
 * TeleStax, Open Source Cloud Communications  Copyright 2012.
 * and individual contributors
 * by the @authors tag. See the copyright.txt in the distribution for a
 * full listing of individual contributors.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */

package org.mobicents.protocols.ss7.tools.simulator.tests.sms;

import javolution.xml.XMLFormat;
import javolution.xml.stream.XMLStreamException;

import org.mobicents.protocols.ss7.map.api.primitives.AddressNature;
import org.mobicents.protocols.ss7.map.api.primitives.NumberingPlan;
import org.mobicents.protocols.ss7.map.api.smstpdu.NumberingPlanIdentification;
import org.mobicents.protocols.ss7.map.api.smstpdu.TypeOfNumber;
import org.mobicents.protocols.ss7.tools.simulator.level3.MapProtocolVersion;

/**
 * 
 * @author sergey vetyutnev
 * 
 */
public class TestSmsServerConfigurationData {

	protected static final String ADDRESS_NATURE = "addressNature";
	protected static final String NUMBERING_PLAN = "numberingPlan";
	protected static final String SERVICE_CENTER_ADDRESS = "serviceCenterAddress";
	protected static final String MAP_PROTOCOL_VERSION = "mapProtocolVersion";
	protected static final String HLR_SSN = "hlrSsn";
	protected static final String VLR_SSN = "vlrSsn";
	protected static final String TYPE_OF_NUMBER = "typeOfNumber";
	protected static final String NUMBERING_PLAN_IDENTIFICATION = "numberingPlanIdentification";
	protected static final String SMS_CODING_TYPE = "smsCodingType";
	protected static final String SEND_SRSMDS_IF_ERROR = "sendSrsmdsIfError";

	protected AddressNature addressNature = AddressNature.international_number;
	protected NumberingPlan numberingPlan = NumberingPlan.ISDN;
	protected String serviceCenterAddress = "";
	protected MapProtocolVersion mapProtocolVersion = new MapProtocolVersion(MapProtocolVersion.VAL_MAP_V3);
	protected int hlrSsn = 6;
	protected int vlrSsn = 8;
	protected TypeOfNumber typeOfNumber = TypeOfNumber.InternationalNumber;
	protected NumberingPlanIdentification numberingPlanIdentification = NumberingPlanIdentification.ISDNTelephoneNumberingPlan;
	protected SmsCodingType smsCodingType = new SmsCodingType(SmsCodingType.VAL_GSM7);
	protected boolean sendSrsmdsIfError = false;

	public AddressNature getAddressNature() {
		return addressNature;
	}
	
	public void setAddressNature(AddressNature addressNature) {
		this.addressNature = addressNature;
	}

	public NumberingPlan getNumberingPlan() {
		return numberingPlan;
	}

	public void setNumberingPlan(NumberingPlan numberingPlan) {
		this.numberingPlan = numberingPlan;
	}

	public String getServiceCenterAddress() {
		return serviceCenterAddress;
	}

	public void setServiceCenterAddress(String serviceCenterAddress) {
		this.serviceCenterAddress = serviceCenterAddress;
	}

	public MapProtocolVersion getMapProtocolVersion() {
		return mapProtocolVersion;
	}

	public void setMapProtocolVersion(MapProtocolVersion mapProtocolVersion) {
		this.mapProtocolVersion = mapProtocolVersion;
	}

	public int getHlrSsn() {
		return hlrSsn;
	}

	public void setHlrSsn(int hlrSsn) {
		this.hlrSsn = hlrSsn;
	}

	public int getVlrSsn() {
		return vlrSsn;
	}

	public void setVlrSsn(int vlrSsn) {
		this.vlrSsn = vlrSsn;
	}

	public TypeOfNumber getTypeOfNumber() {
		return typeOfNumber;
	}

	public void setTypeOfNumber(TypeOfNumber typeOfNumber) {
		this.typeOfNumber = typeOfNumber;
	}

	public NumberingPlanIdentification getNumberingPlanIdentification() {
		return numberingPlanIdentification;
	}

	public void setNumberingPlanIdentification(NumberingPlanIdentification numberingPlanIdentification) {
		this.numberingPlanIdentification = numberingPlanIdentification;
	}

	public SmsCodingType getSmsCodingType() {
		return smsCodingType;
	}

	public void setSmsCodingType(SmsCodingType smsCodingType) {
		this.smsCodingType = smsCodingType;
	}

	public boolean isSendSrsmdsIfError() {
		return sendSrsmdsIfError;
	}

	public void setSendSrsmdsIfError(boolean val) {
		sendSrsmdsIfError = val;
		
	}

	protected static final XMLFormat<TestSmsServerConfigurationData> XML = new XMLFormat<TestSmsServerConfigurationData>(TestSmsServerConfigurationData.class) {

		public void write(TestSmsServerConfigurationData srv, OutputElement xml) throws XMLStreamException {
			xml.setAttribute(HLR_SSN, srv.hlrSsn);
			xml.setAttribute(VLR_SSN, srv.vlrSsn);
			xml.setAttribute(SEND_SRSMDS_IF_ERROR, srv.sendSrsmdsIfError);

			xml.add(srv.serviceCenterAddress, SERVICE_CENTER_ADDRESS, String.class);

			xml.add(srv.addressNature.toString(), ADDRESS_NATURE, String.class);
			xml.add(srv.numberingPlan.toString(), NUMBERING_PLAN, String.class);
			xml.add(srv.mapProtocolVersion.toString(), MAP_PROTOCOL_VERSION, String.class);
			xml.add(srv.typeOfNumber.toString(), TYPE_OF_NUMBER, String.class);
			xml.add(srv.numberingPlanIdentification.toString(), NUMBERING_PLAN_IDENTIFICATION, String.class);
			xml.add(srv.smsCodingType.toString(), SMS_CODING_TYPE, String.class);
		}

		public void read(InputElement xml, TestSmsServerConfigurationData srv) throws XMLStreamException {
			srv.hlrSsn = xml.getAttribute(HLR_SSN).toInt();
			srv.vlrSsn = xml.getAttribute(VLR_SSN).toInt();
			srv.sendSrsmdsIfError = xml.getAttribute(SEND_SRSMDS_IF_ERROR).toBoolean();
			
			srv.serviceCenterAddress = (String) xml.get(SERVICE_CENTER_ADDRESS, String.class);
			
			String an = (String) xml.get(ADDRESS_NATURE, String.class);
			srv.addressNature = AddressNature.valueOf(an);
			String np = (String) xml.get(NUMBERING_PLAN, String.class);
			srv.numberingPlan = NumberingPlan.valueOf(np);
			String mpv = (String) xml.get(MAP_PROTOCOL_VERSION, String.class);
			srv.mapProtocolVersion = MapProtocolVersion.createInstance(mpv);
			String ton = (String) xml.get(TYPE_OF_NUMBER, String.class);
			srv.typeOfNumber = TypeOfNumber.valueOf(ton);
			String npi = (String) xml.get(NUMBERING_PLAN_IDENTIFICATION, String.class);
			srv.numberingPlanIdentification = NumberingPlanIdentification.valueOf(npi);
			String sct = (String) xml.get(SMS_CODING_TYPE, String.class);
			srv.smsCodingType = SmsCodingType.createInstance(sct);
		}
	};

}
